package com.example.qxfw.hbqx.service;

import com.example.qxfw.common.entity.qx.*;
import com.example.qxfw.common.entity.xt.YbzzConfig;
import com.example.qxfw.common.entity.zy.AirHazeWarn;

import java.util.Date;
import java.util.List;

public interface QxybcpService {

    /**
     * 通过要素类型查询所有预报制作参数
     * @param elementtype 要素类型
     * @return
     */
    List<YbzzConfig> selectByElementTypeOfYbzzConfig(String elementtype);


    /**
     * 通过站点名称查询所有乡镇预报站点
     * @param stationname 站点名称
     * @return
     */
    List<TownshipStation> selectByStationNameOfTownshipStation(String stationname);

    /**
     * 根据站点类型查询所有站点名称和站点id
     * @param flag 站点类型
     * @return
     */
    List<SpecialSrvStation> selectByFlagOfSpecialSrvStation(String flag);

    /**
     *根据观测时间查询高空预报
     * @param observtime 观测时间
     * @return
     */
    List<HighElements> selectByObservTimeOfHighElements(Date observtime);

    /**
     * 根据观测时间查询地面要素温度，站点名称和id
     * @param observtime
     * @return
     */
    List<GroundElements> selectByObservtimeOfGroundElements(Date observtime);

    /**
     *根据预报时间时次类型查询逆温预报
     * @param datechar 预报时间
     * @param timechar 预报时次
     * @param fcsttype 预报类型
     * @return
     */
    List<TempInversionyb> selectByDatecharAndTimecharAndFcsttypeOfTempInversionyb(Date datechar, Date timechar, String fcsttype);

    /**
     *根据日期段查询霾预报产品
     * @param datecharStart 起始日期
     * @param datecharEnd 结束日期
     * @return
     */
    List<AirHazeWarn> selectByDateCharOfAirHazeWarn(Date datecharStart, Date datecharEnd);

    /**
     *根据日期和站点id删除能见度预报
     * @param datechar 日期
     * @param stationid 站点id
     * @return
     */
    int deleteByDateCharAndStationIdOfHazeVisibilityForecast(Date datechar, String stationid);

    /**
     * 根据站点id，名称，日期，时效，能见度添加数据
     * @param stationid 站点id
     * @param stationname 站点名称
     * @param datechar 日期
     * @param ntimes 时效
     * @param hazevisibility 能见度范围
     * @return
     */
    int insertByStationIDAndStationNameAndDateCharAndNTimesAndHazeVisibilityOfHazeVisibilityForecast(String stationid, String stationname, Date datechar, Date ntimes,Double hazevisibility);

    /**
     * 根据时间段和站点查询能见度报表时期，时效，能见度
     * @param stationid 站点id
     * @param datecharStart 起始时间
     * @param datecharEnd 终止时间
     * @return
     */
    List<HazeVisibilityForecast> selectByIdAndTimeframeOfHVF(String stationid, Date datecharStart, Date datecharEnd);

    /**
     * 通过站点id和日期查询能见度预报
     * @param stationid 站点id
     * @param datechar 日期
     * @return
     */
    List<HazeVisibilityForecast> selectByIdAndTimeOfHazeVisibilityForecast(String stationid, Date datechar);

    /**
     * 根据日期时效时次站点id查询乡镇预报临时表
     * @param datechar 日期
     * @param ntimes 时效
     * @param timechar 时次
     * @param stationid 站点编号
     * @return
     */
    List<TownShipForecastTemp> selectByIdNtimesDatecharTimechar(Date datechar, Integer ntimes, String timechar, String stationid);


    /**
     * 根据日期类型和时次查询混合层高度
     * @param datechar 日期
     * @param forecasttype 类型
     * @param ntimes 时次
     * @return
     */
    List<MixingHeight> selectByDateAndTypeAndTimesOfMixingHeight(Date datechar, Integer forecasttype, Integer ntimes);

    /**
     * 根据日期和时次查询逆温实况表
     * @param datechar 日期
     * @param timechar 时次
     * @return
     */
    List<TempInversion> selectByDateAndTimeOfTempInversion(Date datechar, String timechar);

    /**
     * 根据时间段获取能见度预报信息
     * @param datecharStart 开始时间
     * @param datecharEnd 结束时间
     * @return
     */
    List<HazeVisibilityForecast> selectByTimePeriodOfHazeVisibilityForecast(Date datecharStart, Date datecharEnd);

    /**
     * 根据时间点获取能见度预报信息
     * @param datechar 时间点
     * @return
     */
    List<HazeVisibilityForecast> selectByTimeOfHazeVisibilityForecast(Date datechar);

    /**
     * 获取所有乡镇预报主表信息
     * @return
     */
    List<TownshipForecast> getAllOfTownshipForecast();

    /**
     * 根据日期时次时效站点名字获取气象要素信息
     * @param datechar 日期
     * @param timechar 时次
     * @param ntimes 时效
     * @param stationname 站点名字
     * @return
     */
    List<TownshipForecast> selectByDateTimecharNtimesNameOfTownshipForecast(
            Date datechar, String timechar, Integer ntimes,String stationname);










}
